package Banco.Conexao;

import java.sql.*;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

/**Classe destinada a operações relacionadas ao Banco de Dados
 * "sistema3g"

 * @author Yoka Sistemas

 * @version full

 * @since Release 01 da aplicação

 */
public class conexaoPortal{

    private ResourceBundle config;
    private String DRIVER_JBDC;
    private String URL ;
    private String usuario  ;
    private String senha ;

    private Connection conexao;
    public Statement statement;
    public ResultSet resultSet;
    public PreparedStatement preparedeStatement;

   static private conexaoPortal referencia=null;//referência única para a conexão com o banco


   /**
    * Construtor - inicializa os parametro de configurção com o banco de dados
   */
    private conexaoPortal() {//construtor privado, pois ninguem poderá dar um new na classe


     this.DRIVER_JBDC = "com.mysql.jdbc.Driver";
     this.URL = "jdbc:mysql://localhost/portalacademico";
     this.usuario = "root";
     this.senha = "admin";
     this.conecta();

    }

     /**
     * Retorna a Instância da Conexão com o Banco Portal Acadêmico.
     * @param void
     * @return conexaoPortal Instância do Objeto
     */
    static public conexaoPortal getConexaoPortal(){

        if(referencia==null){

        referencia=new conexaoPortal();

        }

      return referencia;


    }
    //pro padrão o costrutor conecta ao banco do portal
   /* public conexaoPortal(){

        config = ResourceBundle.getBundle("Banco.conexao.configBDPortal.properties");
        DRIVER_JBDC = config.getString("DRIVER_JBDC");
        URL = config.getString("URL");
        usuario = config.getString("usuario");
        senha = config.getString("senha");

    }
    public void setBanco3g(){

        config = ResourceBundle.getBundle("Banco.conexao.configBD3g.properties");
        DRIVER_JBDC = config.getString("DRIVER_JBDC");
        URL = config.getString("URL");
        usuario = config.getString("usuario");
        senha = config.getString("senha");

    }

    public void setBancoPortal(){

        config = ResourceBundle.getBundle("Banco.conexao.configBDPortal.properties");
        DRIVER_JBDC = config.getString("DRIVER_JBDC");
        URL = config.getString("URL");
        usuario = config.getString("usuario");
        senha = config.getString("senha");

    }*/


     /**Método para estabelecimento de conexão com o Banco de Dados
     *
     * @author Yoka Sistemas

     * @return boolean - 1 - conxão estabelecida : 0 - sem conexão

     */
    public boolean conecta(){
        boolean result=true;

        try{
            Class.forName(DRIVER_JBDC);
            conexao = DriverManager.getConnection(URL, usuario, senha);
            //JOptionPane.showMessageDialog(null,"Conectou");
        }catch(ClassNotFoundException Driver){
            JOptionPane.showMessageDialog(null,"Driver não localizado: " + Driver);
            result = false;
        }catch(SQLException fonte){
            JOptionPane.showMessageDialog(null, "Deu erro na conexão com a fonte de dados" + fonte);
            result = false;
        }
        return result;
    }

     /**Método para encerramento de conexão com o Banco de Dados
     *
     * @author Yoka Sistemas

     */
    public void desconecta(){
        boolean result = true;

        try{
            conexao.close();
            //JOptionPane.showMessageDialog(null,"Banco fechado");
        }catch(SQLException fechar){
            JOptionPane.showMessageDialog(null,"Não foi possível fechar o banco de dados: " + fechar);
            result = false;
        }
    }

    /**Método para executar comandos SQL
     *
     * @author Yoka Sistemas

     * @return Resultset - Um conjunto de resultados SQL é um conjunto de linhas de um banco de dados

     */
    public ResultSet executeSql(String sql){
        ResultSet rs=null;
        try{
            statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
             rs = statement.executeQuery(sql);
             //resultSet=rs;
        }catch(SQLException sqlex){
            JOptionPane.showMessageDialog(null, sqlex.getMessage());
        }

        return rs;
    }

    /**Método para executar comandos SQL
     *
     * @author Yoka Sistemas

     */
   public void execute(String sql){
        try {
             statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
             statement.execute(sql);
        } catch (SQLException ex) {
            Logger.getLogger(conexao3G.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}